package com.coolw.data.migrate.process.strategy;

import com.coolw.data.migrate.domain.request.DataMigrateRequest;
import com.coolw.data.migrate.domain.response.DataMigrateResponse;
import com.coolw.data.migrate.enums.MigrateTypeEnum;

import java.util.List;

/**
 * 数据迁移处理接口
 *
 * @author coolw
 * @date 2024/2/6 16:32
 */
public interface DataMigrateProcess {

    /**
     * 数据迁移类型枚举
     *
     * @return 迁移类型
     */
    MigrateTypeEnum type();

    /**
     * 数据迁移处理
     *
     * @param request 迁移条件
     * @return 数据迁移结果
     */
    DataMigrateResponse process(DataMigrateRequest request);

    /**
     * 获取数据迁移SQL
     *
     * @param request 迁移条件
     * @return sql列表
     */
    List<String> getDataMigrateSql(DataMigrateRequest request);

    /**
     * 获取最后一个批次的数据迁移SQL
     *
     * @param request   迁移条件
     * @param lastBatchSize 最后一个批次数量
     * @return sql列表
     */
    List<String> getLastDataMigrateSql(DataMigrateRequest request, long lastBatchSize);

    /**
     * 获取统计数据迁移数量SQL
     *
     * @param request 迁移条件
     * @return 统计数据迁移数量SQL
     */
    String getCountSql(DataMigrateRequest request);
}
